#!/usr/bin/env python
"""
简化的启动脚本：分步启动系统组件
"""
import os
import sys
from pathlib import Path

# 确保能导入 Django
sys.path.insert(0, str(Path(__file__).parent))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_scheduler.settings')

import django
django.setup()

from django.core.management import call_command
from utils.task_service import TaskService


def step1_setup_database():
    """步骤1：设置数据库"""
    print("=" * 50)
    print("🔧 步骤1：设置数据库")
    print("=" * 50)
    
    try:
        print("创建app应用的迁移文件...")
        call_command('makemigrations', 'app', verbosity=1)
        
        print("执行数据库迁移...")
        call_command('migrate', verbosity=1)
        
        print("✅ 数据库设置完成")
        return True
    except Exception as e:
        print(f"❌ 数据库设置失败: {e}")
        return False


def step2_create_superuser():
    """步骤2：创建超级用户"""
    print("\n" + "=" * 50)
    print("👤 步骤2：创建超级用户")
    print("=" * 50)
    
    try:
        from django.contrib.auth.models import User
        if not User.objects.filter(is_superuser=True).exists():
            print("创建默认超级用户...")
            User.objects.create_superuser(
                username='admin',
                email='admin@example.com', 
                password='admin123'
            )
            print("✅ 超级用户创建完成")
            print("   用户名: admin")
            print("   密码: admin123")
        else:
            print("✅ 超级用户已存在")
        return True
    except Exception as e:
        print(f"❌ 超级用户创建失败: {e}")
        return False


def step3_create_sample_tasks():
    """步骤3：创建示例任务"""
    print("\n" + "=" * 50)
    print("📋 步骤3：创建示例任务")
    print("=" * 50)
    
    try:
        from app.models import ScheduledTask
        if ScheduledTask.objects.exists():
            print("✅ 示例任务已存在，跳过创建")
            return True
        
        task_service = TaskService()
        
        # 创建一个简单的示例任务
        task = task_service.create_interval_task(
            name='示例任务 - 每2分钟执行',
            description='演示系统功能的示例任务',
            module_path='example_tasks',
            function_name='simple_task',
            minutes=2,
            is_active=True
        )
        
        print(f"✅ 创建示例任务: {task.name}")
        print(f"   任务ID: {task.id}")
        print(f"   Job ID: {task.job_id}")
        
        return True
    except Exception as e:
        print(f"❌ 创建示例任务失败: {e}")
        import traceback
        traceback.print_exc()
        return False


def step4_test_scheduler():
    """步骤4：测试调度器"""
    print("\n" + "=" * 50)
    print("⏰ 步骤4：测试调度器")
    print("=" * 50)
    
    try:
        from utils.scheduler_manager import SchedulerManager
        
        scheduler_manager = SchedulerManager()
        scheduler_manager.start_scheduler()
        
        status = scheduler_manager.get_scheduler_status()
        print(f"✅ 调度器启动成功")
        print(f"   状态: {'运行中' if status['running'] else '已停止'}")
        print(f"   任务数: {status['job_count']}")
        
        # 停止调度器（测试用）
        scheduler_manager.stop_scheduler()
        print("✅ 调度器测试完成")
        
        return True
    except Exception as e:
        print(f"❌ 调度器测试失败: {e}")
        import traceback
        traceback.print_exc()
        return False


def main():
    """主函数"""
    print("🚀 Django APScheduler 系统设置")
    print("这个脚本将分步骤设置您的任务调度系统\n")
    
    # 步骤1：设置数据库
    if not step1_setup_database():
        print("\n❌ 设置失败，请检查错误信息")
        return False
    
    # 步骤2：创建超级用户  
    if not step2_create_superuser():
        print("\n❌ 设置失败，请检查错误信息")
        return False
    
    # 步骤3：创建示例任务
    if not step3_create_sample_tasks():
        print("\n❌ 设置失败，请检查错误信息")
        return False
    
    # 步骤4：测试调度器
    if not step4_test_scheduler():
        print("\n❌ 设置失败，请检查错误信息")
        return False
    
    # 设置完成
    print("\n" + "=" * 60)
    print("🎉 系统设置完成！")
    print("=" * 60)
    
    print("\n📋 下一步操作：")
    print("1. 启动Django服务器:")
    print("   python manage.py runserver")
    print("")
    print("2. 启动调度器:")
    print("   python manage.py start_scheduler")
    print("")
    print("3. 访问系统:")
    print("   • 管理界面: http://127.0.0.1:8000/admin")
    print("   • API接口: http://127.0.0.1:8000/api")
    print("")
    print("4. 查看状态:")
    print("   python manage.py scheduler_status")
    
    return True


if __name__ == '__main__':
    try:
        success = main()
        if not success:
            sys.exit(1)
    except KeyboardInterrupt:
        print("\n🛑 设置被中断")
        sys.exit(1)
    except Exception as e:
        print(f"\n❌ 意外错误: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)